\chapter{Introduzione}

Per l'esame di ``\emph{progetto di linguaggi e compilatori}'' abbiamo deciso di
basarci sul progettino consegnato per l'esame ``\emph{linguaggi e compilatori}''
tenuto lo scorso semestre.
L'obiettivo di tale progettino è stata la definizione del linguaggio per la 
descrizione di diagrammi UML. In particolar modo si era prestata attenzione al
controllo di dichiarazione/uso/non redichiarazione
delle classi e a controlli di non re-dichiarazione di package.


\section{cUml2Svg - Coded UML to SVG} 
Il progetto da noi sviluppato si chiama \emph{cUml2Svg}. \\*  
L'acronimo \emph{cUml2Svg} sta per ``\emph{Coded UML to SVG}`` ; 
il progetto consiste nello sviluppare un traduttore che traduca da una
rappresentazione in codice dei digrammi UML delle classi alla rappresentazione
grafica tipica dell'UML.\\*
La rappresentazione grafica da noi scelta e sulla quale abbiamo basato il nostro
progetto è l'SVG. \\*
Per utilizzare al meglio il nostro progetto abbiamo sviluppato anche una 
interfaccia grafica, che aiuta nella stesura dei modelli e degli schemi da
utilizzare. In particolare abbiamo sviluppato il text-highlight, i
controlli degli errori (errori di sintassi, errori semantici e warning) e la
compilazione automatica.
L'interfaccia grafica è stata costruita come estensione del popolare ambiente 
 di sviluppo Eclipse~\cite{eclipse_website:1}


\section{Uml}  

L'acronimo UML significa \emph{Unified Modeling Language} ("linguaggio di modellazione
unificato"), è un linguaggio di modellazione e specifica basato sul paradigma object-oriented. 
UML è un linguaggio di modellazione semi-formale; il diagramma che genera è costituito da elementi
grafici, elementi testuali formali, ed elementi di testo libero. Ha una semantica molto precisa e un
grande potere descrittivo.


\section{SVG - Scalable Vector Graphics} 
L'SVG (Scalable Vector Graphics), indica una tecnologia in grado di visualizzare oggetti 
di grafica vettoriale e, pertanto, di gestire immagini scalabili dimensionalmente.
Più specificamente si tratta di un linguaggio derivato dall'XML, che si pone l'obiettivo 
di descrivere figure bidimensionali statiche o animate. \\*
In Particolare SVG permette di trattare tre tipi di oggetti grafici:

\begin{itemize}
  \item forme geometriche, cioè linee costituite da segmenti di retta, curve e
  aree delimitate da linee chiuse;
  \item immagini della grafica raster e immagini digitali;
  \item testi esplicativi, eventualmente cliccabili.
\end{itemize} 
 
La visualizzazione del risultato in modalità grafica è molto semplice ed
immediata, basta utilizzare il browser-web Mozilla
Firefox~\cite{firefox_website:2}. \\*
Per la modifica della rappresentazione è possibile utilizzare un editor molto
funzionale e completo, si tratta di inkscape~\cite{Inkscape_website:3}. \\* 
Entrambi i programmi da utilizzare sono opensource e
multi-piattaforma, è possibile, infatti, installarli su macchine con sistema 
operativo Unix, MacOs e Windows.
     
      
\section{Realizzazione plugin per Eclipse} 

La realizzazione del plugin di Eclipse è stata difficoltosa all'inizio del
progetto. La causa è dovuta alla poca documentazione specifica per lo sviluppo
di editor di testo ed in generale della documentazione troppo frammentata.
Per lo sviluppo ci siamo basati su un libro di testo ``\emph{Eclipse in
Action}''~\cite{eclipse_action:4}, sul progetto ``\emph{easharp}''~\cite{esharp_website:5}
e sulle guide ``\emph{Technical library view di IBM}''~\cite{ibm_website:6}


